<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Détail du nouveau système : Les Hook (Ammeçon)</title>
</head>

<body>
<h1>Legende :</h1>
<font color="#006600">En vert</font> : Les mise à jour<br />
En noir : Les Ancienne mise à jour
<br />
<h1>Système de Hook</h1>
Le site comporte maintenant un système de hook qui permet de rendre independ chaque module du kernel,<br />
avant tous les modules avait leurs fonction dans includes/function.inc.php<br />
Maintenant chaques modules qui ont besoin de partagé leurs fonctions à d'autre module ont à un fichier :<br />
<ul><li>
module.config.php</li>
<li>function.inc.php propre à chaque modules</li></ul>

<br />
<h1>module/monModule/module.config.php</h1>
Sa structure est : <br />
Hook::add("KERNEL.MODULE.FUNCTION",function($module){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(file_exists($module.'/function.inc.php'))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include_once 'function.inc.php';<br />
});
<br />Cette structure n'est pas obligatoire si le module n'utilise pas de fonctions à partagé à l'essemble du site<br />
<h1>modules/monModule/function.inc.php</h1>
Ce fichier contient toutes les fonctions propre au module concerné.<br />
/!\Remarque : <br />
Utilisez spl_autoload_register("nomDeLaFonction"); pour rendre accéssible la fonction sur tout le site (Un exmple est dispo sur le fichier function.inc.php dans le dossier modules/membre/)
<br />
<h1>includes/function.inc.php</h1>
<p>Ce fichier existe encore et contient seulement les fonctions propre au kernel (ne plus mettre de fonction appartenant aux modules) 

<br /><br/>
<h1>Créer un Hook perso</h1>
Pour créer son Hook : <br />
Hook::create("NomDuHook",false); //Ici false veux dire que le hook est unique (Ou on ne peut pas ajouter d'autre hook à la suite sans ecrasé le hook précédent)
<br />
Hook::add("NomDuHook",function([param,,param2,...]){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;//Le code voulu
<br />
}); //Eventuellement function peut prendre des paramètres, celà dependra de comment vous appellerez Hook::call et de vos besoins<br />
Hook::call("NomDuHook"[,param1,param2,...]);//On éxecute le hook 'NomDuHook' qui va éxécuter votre code dans Hook::add<br />
<h1>Liste des Hooks predefini</h1>
Certain Hook son déja predefini par le kernel, dont voici la liste et leurs fonctions : 
<br />
<strong>KERNEL.MODULE.FUNCTION</strong> => Executé automatiquement à la lecture du fichier module.inc.php, il permet d'inclure des fichiers de fonctions par exemple<br />
<strong>KERNEL.MENU.LEFT.ADD</strong> => Executé lors de la construction du menu de gauche, on peut utiliser Hook::add à volonté pour ajouter autant de menu (depuis module.config.php) et utiliser le paramètre 3 qui est la priorité d'affichage (d'éxecution)
<br />
<br />
<font color="#006600"><strong>KERNEL.MOBILE.MENU.LEFT.ADD</strong> => Idem que KERNEL.MENU.LEFT.ADD mais pour la version mobile</font>
<br />
<strong>KERNEL.MENU.TOP.ADD</strong> => IDEM que KERNEL.MENU.LEFT.ADD, mais pour le menu du haut (la barre avec les lien connexion, recherche, etc ...)
<br />
<br />
<font color="#006600"><strong>KERNEL.MOBILE.MENU.TOP.ADD</strong> => IDEM que KERNEL.MENU.TOP.ADD, mais pour le menu du haut version mobile</font>
<br />
<strong>KERNEL.MENU.LEFT.ADD.Community</strong> => Ce hook est defini par defaut, il cible le menu Communauté présent de base par defaut sur la page<br />
<font color="#006600"><strong>KERNEL.MOBILE.MENU.LEFT.ADD.Community</strong> => Ce hook est defini par defaut pour la version mobile, il cible le menu Communauté présent de base par defaut sur la page<br /></font>
<strong>KERNEL.PAGE.TOP.CODE.EXECUTE</strong> => Executé avant l'affichage du code HTML, (En réalité éxécuté aprés tout les includes du kernel), pratique pour executé des fonction avant rendu HTML. Info : KERNEL.PAGE.TOP.CODE.EXECUTE est defini avec le paramètre à true du Hook::create, c'est à dire qu'on peut appeler autant de fois Hook::add pour y mettre du nouveau code sans ecrasé les autres enregistrements de code placé par d'autres modules utilisant celui-ci)<br />
<strong>KERNEL.MODULE.EXISTS.NOMDUMODULE</strong> => Ce Hook est defini lors du chargement des fichiers module (module.config.php et include.inc.php) et permet de savoir via les autres modules, si tel ou tel module est présent<br />
<strong>KERNEL.MODULE.REQUIRED.FOR:NOMDUMODULE</strong> => Ce hook n'est pas defini par defaut (Mais il est appeler lors du chargement du module demandé par l'user), il permet de verifier en masse les modules dont il à besoin à l'aide de KERNEL.MODULE.EXISTS.NOMDUMODULE et ainsi retourné true ou autre (-1, false, ...). Ainsi si true est retourné le module est chargé et retourné à l'écran, si il retourne autre que true, la page 404 s'affichera./!\ Cas particulier : si vous le definissez mais que vous ne retournez rien, le comportement sera pareil que si vous ne l'avez pas defni (Le module s'éxécutera)<br />
<h1>Supprimer un Hook</h1>
Pour supprimer un Hook, utilisez simplement Hook::delete("nomDuHook");<br />
Attention : Vous ne pouvez pas supprimer un Hook créée par defaut par le kernel<br />
Si vous voulez supprimer un code emis par un Hook::add dont la création à été faite par Hook::create("nomDuHook",true); utilisez Hook::delete_multihook_element("nomDuHook",indiceDePrioriteDuCode,index);, il faut cependant connaitre l'index du code à supprimer (indiceDePrioriteDuCode est simplement l'indice indiqué dans Hook::add 3ème paramètre => par defaut 0 si il n'est pas sepcifié)
<br />
<h1>Dévelloppeur/Assistance de maintenance du Kernel</h1>
Si vous souhaitez créer un Hook protégé appartenant au kernel (Dont les modules ne peuvent ni supprimer ni modifier),
utilisez Hook::protected_create et Hook::protected_add
<br />

<h1>Mise à jour -> NEW</h1>
<font color="#006600">
Les menu du haut et de gauche se trouve dans le dossier module qui souhaite afficher un ou des liens des pages à offrir à l'utilisateur
<br />
Exemple : 
Les 5 derniers membres inscrits sont ajoutés depuis la page module.config.php du dossier module/membre

Pour le menu du haut et de gauche, la version mobile fait appelle au contenu du hook <strong>KERNEL.MOBILE.MENU.TOP.ADD</strong> et <strong>KERNEL.MOBILE.MENU.LEFT.ADD</strong>
<br />
Le mobile est detecté par le site via la fonction <strong><i>isMobile()</i></strong> disponnible pour touts les modules et l'ensemble du site, cette fonction renvoie <strong>true</strong> si le site est affiché sur mobile ou <strong>false</strong> si c'est sur <strong><i>PC ou MAC</i></strong>
<br />
<br />
De même la feuille de style (.css) change, si on est sur mobile la feuille appelé est <strong><i>style.mobile.css</i></strong> sinon c'est <strong><i>style.css </i></strong>
</font>
<br />
</body>
</html>